Javascriptの基本-2

JavascriptでHTML操作してみよう

メイン画像

Menu

DOM操作

イベント

情報を受け取る

連続表示

一つにまとめる

配列の変更

多次元配列

querySelector

フォームから情報を取得

パスワード自動生成

DOM操作

Id:Class:コードの表示が可能

1 + 1 = ?

1 + 1 = ?

答え
    

      表示: 1 + 1 = ? 
      <p>1 + 1 = ?</p>


      表示: 1 + 1 = 2 
      <p>1 + 1 = <span id="anser">?</span></p>

      <script>
        document.getElementById('anser').textContent = 1 + 1;
      </script>

    
  

イベント

ボタンをクリックすると、画像が表示:非表示

    
      
      画像を表示button 
      <button id="btn">画像を表示</button>

      画像を非表示button 
      <button id="btn1">画像を比表示</button>

      <img id="img" src="img/logo.png" alt="答え" style="display:none;">

      画像を表示
      <script>
        document.getElementById('btn').addEventListener('click', function(){
          document.getElementById('img').style.display = 'block';
        });
      </script>

      画像を非表示
      <script>
        document.getElementById('btn1').addEventListener('click', function(){
          document.getElementById('img').style.display = 'none';
        });
      </script>

    
  

ボタンを押すと音が鳴りサイコロを振って数字変化

サイコロの目は?

サイコロ
    
      
      サイコロの目は?</span>
      <button id="btn2">サイコロを振る</button>

      <script>
        document.getElementById('btn2').addEventListener('click', function(){
          document.getElementById('dice').textContent = Math.floor(Math.random() * 6) + 1;
          音が鳴る
          const audio = new Audio('voise/voice.mp3');
          audio.play();
        });
      </script>

    
  

precodeの枠の中でクリックすると音が鳴る

連続再生キャンセル用
    

      precodeより下に書かないと反応しない

      <script>

          document.getElementById('precode').addEventListener('click', function(){    // precodeの枠の中でクリックすると音が鳴る
            if (!this.audio1) {                                                       // 連続再生キャンセル用
                this.audio1 = new Audio('voise/voice.mp3');                           //音が鳴る 
                this.audio1.addEventListener('ended', function(){                    //音が終わったら
                this.audio1.currentTime = 0;                                         //音を最初に戻す
                this.audio1.isPlaying = false;                                       //音が終わったらfalse
                }.bind(this));                                                       //bind(this)を使うことで、thisを使えるようにする
            }
            if (!this.audio1.isPlaying) {                    //連続再生キャンセル用
                this.audio1.play();                        //音が鳴る
                this.audio1.isPlaying = true;             //音が鳴っている間はtrue
            }
          });

      </script>

    
  

入力した内容を受け取る(form)

理屈を知るために、小さい計算機もどき作成

数字の掛け算

x = ?

文字列の足し算

+ = ?
    

        掛け算の計算
        <div class="Calculator">
          <p>数字の掛け算</p>
          <input type ="number" id="num1"> x <input type ="number" id="num2"> = <span id="result">?</span>  
        </div>

        文字列の足し算
        <div class="Calculator">
          <p>文字列の足し算</p>
          <input type ="text" id="text1"> + <input type ="text" id="text2"> = <span id="result1">?</span>
        </div>

        ボタン
        <div class="Calculator-div">
          <button id="btn3">計算</button>
        </div>

      
    
      

        <script>

          // 掛け算の計算
          document.getElementById('btn3').addEventListener('click', function(){        // ボタンをクリックしたら
            const num1 = document.getElementById('num1').value;                       // valueで入力した値を取得
            const num2 = document.getElementById('num2').value;                       // valueで入力した値を取得
            document.getElementById('result').textContent = Math.round(num1 * num2); // Math.round()で四捨五入
          });

          // 文字列の足し算
          document.getElementById('btn3').addEventListener('click', function(){      // ボタンをクリックしたら
            const text1 = document.getElementById('text1').value;                  // valueで入力した値を取得
            const text2 = document.getElementById('text2').value;                // valueで入力した値を取得
            document.getElementById('result1').textContent = text1 + text2;     // 文字列の足し算
          });

        </script>

      
    

テキストフィールドに入力がない場合に警告する+音が出る

名前の入力の例で確認

else画像
      

        名前の入力の例で確認

        <div class="Calculator">
          <p>名前の入力の例で確認</p>
          <input type ="text" id="num3" placeholder="名前を入力してください">
          <button id="btn4">名前を表示</button>
        </div>

      
    
      

        <script>

          document.getElementById('btn4').addEventListener('click', function(){               // ボタンをクリックしたら
            const num3 = document.getElementById('num3').value;                               // valueで入力した値を取得
            if (num3 === '') {                                          // 入力がない場合
              const audio = new Audio('voise/Who.aac');                 // 音声ファイルを指定
              audio.playbackRate = 1.5;                                // 再生速度を2倍にする
              audio.play();                                            // 音が鳴る                                                
              alert('貴方は誰ですか?');                                // 警告
            } else {                                                              // 入力がある場合
              const audio1 = new Audio('voise/Welcomehome.aac');                 // 音声ファイルを指定                              
              audio1.play();                                                     // 音が鳴る
              alert('おかえりなさいませ' + num3 + 'ご主人様');                     // 名前を表示
            }
          });

        </script>

      
    

論理演算子::[true=正][false=誤]

記号 説明
A === B 等しい
A < B Aが大きい
A > B Bが大き
A >= B AがB以上、B含む
A <= B AがB以下、A含む
A !== B 等しくない
&& かつ(左:右:両方等しい時)
|| または(左:右:どちらか等しい時)
=> アロー関数

数字の入力(10以下の数字は警告される)条件を加えた

      

        数字の入力(空文字or10以下の数字は警告される)条件を加えた

        <div class="Calculator">
          <p>数字の入力(10以下の数字は警告される)条件を加えた</p>
          <input type ="text" id="num5" placeholder="数字入力してください">
          <button id="btn5">数字を表示(10以下の数字は警告される)</button>
        </div>

      
    
      

        <script>

          document.getElementById('btn5').addEventListener('click', function(){    // ボタンをクリックしたら
            const num5 = document.getElementById('num5').value;                   // valueで入力した値を取得
            if (num5 === '' || num5 <= 10) {                                          // 入力がない場合                                            
              alert('10以上の数字を加えてください');                           // 警告
            } else {                                                         // 入力がある場合                                       
              alert('貴方の幸福度は' + num5 + '位です');                      // 表示
            }
          });

        </script>

      
    

数字を連続で表示(for文)

    

      <script>

      
        for (let i = 1; i <= 10; i++) {        for(初期化処理; 条件式; 更新処理) 

        document.write(i + '回目<br>');     繰り返し処理
        }

      </script>

    
  

数字を連続で表示(while文)

繰り返す回数がわかってる場合便利

    

      <script>

        let i = 1;                              let i = 1;  初期化処理
        while (i <= 15) {                        while(条件式) 
          document.write(i + '回目<br>');         繰り返し処理
          i++;                                                更新処理
        }

      </script>

    
  

応用でサイコロが20出るまで続く

ページのリロードで変化

    

      <script>

        let a = 0;
        while (a !== 20) {                        while(条件式) 

          a = Math.floor(Math.random() * 20);          繰り返し処理
          document.write(a + '回目<br>');
          a++;                                              更新処理
        }

      </script>

    
  

do while文

    

      <script>

        let c = 0;
        do {
          c = Math.floor(Math.random() * 10) ;
          document.write('サイコロ振った回数は' + c + '個目<br>');
          c++;
        } while (c !== 10);

      </script>

    
  

break文(強制終了)

    

      <script>
                                                  
        for (let d = 0; d < 100; d++) {                                  // 100回繰り返す        
          d = Math.floor(Math.random() * 100)+1 ;                         // 100までの数字
          document.write('サイコロ振った回数は' + d + '個目<br>');

          if (d === 1) {                                              // 1になったら
            break;                                                    // 終了
          }
        }

      </script>

    
  

continue文(スキップ)

continue条件になった時の条件を無視して最初に戻る

    

      <script>

        for (let e = 0; e < 10; e++) {                                  // 10回繰り返す
          e = Math.floor(Math.random() * 10)+1 ;                         // 10までの数字
          if (e === 5) {                                              // 5になったら
            continue;                                                // スキップ
          }
          document.write('サイコロ振った回数は' + e + '個目<br>');
        }

      </script>

    
  

1つにまとめる

配列いろんなやり方があるが、for Each文、お勧め

指定して表示[01234]

    

      <script>
                           0          1       2          3       4
        const fruits = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'いちご'];
  
          document.write(fruits[0] + '<br>');    // りんご

      </script>

    
  

まとめて表示

    

      <script>
                           0          1       2          3       4
        const fruits1 = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'いちご'];
      
        for (let f = 0; f < fruits1.length; f++) {    // fruits1の数だけ繰り返す
          document.write(fruits1[f] + '<br>');
        }

      </script>

    
  

for of文

for (変数 of 配列) 繰り返したい処理

    

      <script>
                           0          1       2          3       4
        const fruits2 = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'いちご'];           
        for (let g of fruits2) {                                            // fruits2の数だけ繰り返す
          document.write(g + '<br>');                                 // fruits2の中身を表示
        }                                                         
      </script>

      for (変数 of 配列) 繰り返したい処理

    
  

for Each文=お勧め

配列.forEach(関数名)

    

      <script>
                           0          1       2          3       4
        const fruits3 = ['りんご', 'バナナ', 'みかん', 'ぶどう', 'いちご'];           
        fruits3.forEach(function(g) {                                       // fruits3の数だけ繰り返す
          document.write(g + '<br>');                                 // fruits3の中身を表示
        });

      </script>

      配列.forEach(関数名)

    
  

連想配列

連想配列の中身を指定して表示[りんご]

    

      <script>

        const fruits55 = {
          'apple': 'りんご',
          'banana': 'バナナ',
          'orange': 'みかん',
          'grape': 'ぶどう',
          'strawberry': 'いちご'
        };
        
        for (let z in fruits55) {
          document.write(fruits55[z] + '<br>');                 // fruits55の中身を表示
        }
        
        document.write(fruits55['apple'] + '<br>');             // りんご

      </script>

     
  

中身全て表示

    

      <script>

        const fruits555 = {
          'apple': 'りんご',
          'banana': 'バナナ',
          'orange': 'みかん',
          'grape': 'ぶどう',
          'strawberry': 'いちご'
        };
        
        for (let q in fruits555) {
          document.write(fruits55[q] + '<br>');                 // fruits55の中身を表示
        }

      </script>

    
  

key取得して表示

    

      <script>

        const fruits5555 = {
          'apple': 'りんご',          // key: value  'apple'
          'banana': 'バナナ',         // key: value  'banana
          'orange': 'みかん',        // key: value   'orange'
          'grape': 'ぶどう',          // key: value  'grape'
          'strawberry': 'いちご'      // key: value  'strawberry'
        };

        for (key in fruits5555) {
          document.write(key + '<br>');                 
        }

      </script>

    
  

配列の変更

内容の追加

末尾に追加(.push)

    

      <script>

        const itemitem =['月', '火', '水', '木', '金', '土', '日'];

        // 内容の追加
        itemitem.push('月面');                                          // 末尾に追加
        document.write(itemitem + '<br>');   

      </script>

    
  

内容の追加

先頭に追加(.unshift)

    

      <script>

        const itemitem1 =['月','火', '水', '木', '金', '土', '日'];

        // 内容の追加
        itemitem1.unshift('太陽');                                          // 先頭に追加
        document.write(itemitem1 + '<br>');

      </script>

    
  

内容の変更

指定した箇所を変更(月[0])

    

      <script>

        const itemitem2 =['月','火', '水', '木', '金', '土', '日'];

        // 内容の変更
        itemitem2[0] = '';                           // 0番目を変更                        
        document.write(itemitem2 + '<br>');          // 月が消える

      </script>

    
  

内容の変更

内容の最初削除(shift)

    

      <script>

        const itemitem3 =['月','火', '水', '木', '金', '土', '日'];

        // 内容の変更
        itemitem3.shift();                           // 最初を削除                        
        document.write(itemitem3 + '<br>');          // 月が消える

      </script>

    
  

内容の変更

内容の最後削除(pop)

    

      <script>

        const itemitem4 =['月','火', '水', '木', '金', '土', '日'];

        // 内容の変更
        itemitem4.pop();                           // 最後を削除                        
        document.write(itemitem4 + '<br>');          // 日が消える

      </script>

    
  

内容の変更

指定した箇所を削除(.splice)(月[0])

    

      <script>
                           0     1     2     3    4    5     6
        const itemitem5 =['月','火', '水', '木', '金', '土', '日'];

        // 内容の変更
        itemitem5.splice(0, 1);                           // 0番目を削除       

        // 6番目削除する場合は、itemitem5.splice(6, 1);    

        document.write(itemitem5 + '<br>');          // 月が消える

      </script>

    
  

コンソールログ

画面に、結果を表示していたは、確認が大変な時があるので、コンソール画面で確認[F12]

console.log('表示したい内容')

コードだけ記載確認しながら実践してみてくれ

    

      <script>

        console.clear();    // コンソールログを消す

        console.log('私は天才だ');     // コンソールログ表示

        console.error('エラーです');    // エラー表示

        console.warn('警告です');      // 警告表示
        
        console.time('タイマー');      // タイマー開始

        console.timeEnd('タイマー');    // タイマー終了 

      </script>

    
  

多次元配列=複雑あまり使わないかもね!

    

      <script>

        const area = {
          'hokkaido': ['札幌'],
          'aomori': ['青森', '弘前'],
        }
        for (let key in area) {
          document.write(key + '<br>');
          for (let value of area[key]) {
            document.write(value + '<br>');
          }
        }

      </script>

    
  

querySelector

querySelectorは、HTMLの要素を取得

querySelectorAllは、HTMLの要素を全て取得

querySelector('要素名')で取得

querySelectorAll('要素名')で全て取得

querySelector('#id名')で取得

querySelectorAll('.class名')で全て取得

1 + 1 =?

    

      <p>1 + 1 =<span id="spsp">?</span></p>

    
  
    

      <script>

        document.querySelector('.spsp').textContent = 1 + 1;     // 1 + 1 = 2

      </script>

    
  

フォームから情報を取得

      

        <label>住まい</label>
          <select id="pref" name="pref">
            <option value="北海道">北海道</option>
            <option value="青森">青森</option>
            <option value="岩手">岩手</option>
          </select>
          <label>ご意見箱</label>
          <textarea id="opinion" name="opinion"></textarea>
        <div>
          <button id="btn6">送信</button>
        </div>

      
    
      

        <script>
          document.getElementById('btn6').addEventListener('click', function() {
            const pref = document.getElementById('pref').value;                         // プルダウンの情報取得
            const opinion = document.getElementById('opinion').value;                   // テキストエリアの情報取得
            alert('住まいは' + pref + 'です。' + 'ご意見は' + opinion + 'です。');
          });
        </script>

      
    

チェックボックスの情報取得

      

        <label>好きな果物を1つ選択:</label>
        <label for="apple">りんご</label>
        <input type="checkbox" id="apple" name="apple" value="りんご">              
        <label for="banana">バナナ</label>
        <input type="checkbox" id="banana" name="banana" value="バナナ">
        <label for="orange">みかん</label>
        <input type="checkbox" id="orange" name="orange" value="みかん">
        <div>
          <button id="btn7">送信</button>
        </div>

      
    
      

        <script>
          document.getElementById('btn7').addEventListener('click', function() {
            const apple = document.getElementById('apple').checked;                 // チェックボックスの情報取得
            const banana = document.getElementById('banana').checked;               // チェックボックスの情報取得
            const orange = document.getElementById('orange').checked;               // チェックボックスの情報取得
            // 一つだけ選択可能
            if (apple === true && banana === false && orange === false) {            // りんごだけ選択
              alert('好きな果物は' + 'りんご' + 'です。');
            } else if (apple === false && banana === true && orange === false) {     // バナナだけ選択
              alert('好きな果物は' + 'バナナ' + 'です。');
            } else if (apple === false && banana === false && orange === true) {      // みかんだけ選択
              alert('好きな果物は' + 'みかん' + 'です。');
            } else {
              alert('好きな果物は一つだけ選択してください。');
            }
          });
        </script>

      
    

ラジオボタンの情報取得

      

        <label>好きな車を1つ選択:</label>
        <label for="toyota">トヨタ</label>
        <input type="radio"  name="car" value="トヨタ" >
        <label for="nissan">日産</label>
        <input type="radio"  name="car" value="日産">
        <label for="honda">ホンダ</label>
        <input type="radio"  name="car" value="ホンダ">
        <label for="honda">回答なし</label>
        <input type="radio"  name="car" value="回答なし" checked>
        <div>
          <button id="btn8">送信</button>
        </div>

      
    
      

        <script>
          document.getElementById('btn8').addEventListener('click', function() {
            const car = document.querySelector('input[name="car"]:checked').value;    // ラジオボタンの情報取得
            console.log('好きな車は' + car + 'です。');
          });
        </script>

      
    

パスワード自動生成

あらかじめパスワードの元となる数字を配列で準備する(大小文字数字)

パスワードの文字数を指定する(ユーザー指定orあらかじめ指定)

乱数を使用して配列の中から適当な1文字選択

パスワードの文字数繰り返す

画面に表示する

      
  
        <label>パスワード</label>
        <input type="text" id="password" name="password">
        <div>
          <button id="btn9">生成</button>
        </div>
  
      
    
      
  
        <script>

          document.getElementById('btn9').addEventListener('click', function() {
            let pass = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';      // パスワードの元となる数字を配列で準備   
            let length =Number(window.prompt('何文字のパスワード作成しますか?'))                   // パスワードの文字数を指定する
            let password = '';                                                                 // パスワードの初期化
            for (let i = 0; i < length; i++) {                                                // パスワードの文字数繰り返す
              password += pass[Math.floor(Math.random() * pass.length)];                      // 乱数を使用して配列の中から適当な1文字選択
            }
            document.getElementById('password').value = password;                            // 画面に表示する
          });
  
        </script>